const svgCaptcha = require('svg-captcha');
const { getVerifyCode, verifyCode } = require('../service/verifyCode.service');
const { VERIFY_CODE_TIME_OUT } = require('../app/config');

class VerifyCodeController {
  async getVerifyCode(ctx, next) {
    const captcha = svgCaptcha.create({
      size: 4, // 验证码长度
      ignoreChars: '0o1i', // 排除这些字符
      noise: 3, // 干扰线的数量
      color: true, //是否有文字颜色
      background: '#6495ED' // svg的背景颜色
    });

    const result = await getVerifyCode(captcha.text);
    console.log('[verifyCode.controller]获取验证码', result);

    ctx.set('Content-type', 'image/svg+xml');
    ctx.body = captcha.data;
  }

  async verifyCode(ctx, next) {
    const { code } = ctx.request.body;
    const result = await verifyCode(code);
    console.log('[verifyCode.controller]获取验证验证码的结果' ,result);

    // 如果结果为空数组，则返回验证码输入错误
    if (result.length === 0) {
      const error = new Error('1001 [verifyCode.controller]');
      return ctx.app.emit('error', error, ctx);
    }

    // 验证验证码是否超时
    const timeout = parseInt(VERIFY_CODE_TIME_OUT); // 获取超时时间
    const currentTimestamp = new Date().getTime(); // 获取当前时间
    const codeUpdateTimestamp = new Date(result[0].updateAt).getTime(); // 获取验证码最后一次更新时间
    if (currentTimestamp > codeUpdateTimestamp + timeout * 1000) {
      const error = new Error('1002 [verifyCode.controller]');
      return ctx.app.emit('error', error, ctx);
    }

    await next();
  }
}

module.exports = new VerifyCodeController();